[程式碼&DEMO] [HackMD完整筆記]
按下鍵盤後要播放出相對應的聲音,並同時產生一個特效,按下其他鍵後就會關閉該特效。
STEP1 新增keydown listener
監聽鍵盤按鈕按下。
STEP2 建立playHandler
play sound去播放聲音和DOM style的特效。
STEP3 新增transitionend listener
以css特效結束作監聽。
STEP4 建立function removeClassList
移除'playing'樣式。
─═♤═─‧─═♥═─‧─═♤═─‧─═♥═─‧─═♤═──═♤═─‧─═♥═─
─═♤═─‧─═♥═─‧─═♤═─‧─═♥═─‧─═♤═──═♤═─‧─═♥═─
DOM裡每個節點上都有一個classList物件。
可用裡面的方法新增、刪除、修改節點上的CSS。
也可以用它來判斷某個節點是否被賦予了某個CSS。
鍵盤按鍵觸發時,增加playing這個class。
//DOM style
function playHandler(e){
const dom = document.querySelector(`div[data-key="${e.keyCode}"]`);
if (dom){
dom.classList.add('playing');
}
transitionend的時候去remove掉playing這個class。
function removeClassList(e){
console.log(e)
if(e.propertyName === 'transform'){
e.target.classList.remove('playing')
}
}
─═♤═─‧─═♥═─‧─═♤═─‧─═♥═─‧─═♤═──═♤═─‧─═♥═─
CSS屬性的值從一個值變成另一個值的過程叫做漸變。CSS3 transition系列屬性可控制這個變化過程,使得屬性值變化過程更加平滑。
當一個CSS過渡完成時,會出現transitionend事件。
─═♤═─‧─═♥═─‧─═♤═─‧─═♥═─‧─═♤═──═♤═─‧─═♥═─
if(e.propertyName === 'transform'){
e.target.classList.remove('playing')
}
== 左右兩邊的值相等就回傳true
=== 左右兩邊的值以及type均相等才回傳true